#include <iostream>
#include <queue>
#include <vector>

using namespace std;
using ll=long long;
const int N=1100;
const int MOD=998244353;
int mp[N][N],maxn[N][N],minn[N][N]; 
void get_max(int a[],int b[],int n,int k)
{
	queue<int> q;
	for(int i=1;i<=n;i++)
	{
		if(q.size() && q.front()<=i-k)
			q.pop();
		while(q.size() && a[q.front()]<=a[i])
			q.pop();
		q.push(i);
		b[i]=a[q.front()];
	}
}
void get_min(int a[],int b[],int n,int k)
{
	queue<int> q;
	for(int i=1;i<=n;i++)
	{
		if(q.size() && q.front()<=i-k)
			q.pop();
		while(q.size() && a[q.front()]>=a[i])
			q.pop();
		q.push(i);
		b[i]=a[q.front()];
	}
}
int main()
{
	int n,m,a,b;
	cin>>n>>m>>a>>b;
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&mp[i][j]);
	
	
	for(int i=1;i<=n;i++)
	{
		get_max(mp[i],maxn[i],m,b);
		get_min(mp[i],minn[i],m,b);		
	}
	ll ret=0;
	int t[N],r1[N],r2[N];
	for(int i=b;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			t[j]=maxn[j][i];
		}
		get_max(t,r1,n,a);
		for(int j=1;j<=n;j++)
		{
			t[j]=minn[j][i];
		}
		get_min(t,r2,n,a);
		for(int j=a;j<=n;j++)
		{
			ret=(ret+(ll)r1[j]*r2[j]%MOD)%MOD;
		}
		
	}
	cout<<ret<<endl;
	return 0;
}
